package frpc.manager.operation.simple;

import fdupc.http.ResultBean;
import frpc.manager.operation.RedisLimitingMessageFunction;
import frpc.manager.operation.RedisLockErrorFunction;
import frpc.manager.operation.RedisLockSuccessFunction;
import lombok.extern.slf4j.Slf4j;

/**
 * 类描述:  简单锁枚举对象
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2022/6/17 0017 下午 3:01
 */
@Slf4j
public class SimpleLockEnumBean {

    /**
     * 功能描述：获取Redis锁处理失败——简单函数对象
     *
     * @param message 需要返回的说明信息
     * @date : 2022/6/17 0017 下午 3:04
     */
    public static RedisLockErrorFunction<ResultBean> giveLockErrorToResultBean(String message) {
        return (iRedisManage, e) -> ResultBean.factoryError(message);
    }

    /**
     * 功能描述：获取Redis锁处理失败——简单函数对象
     *
     * @date : 2022/6/17 0017 下午 3:04
     */
    public static RedisLockErrorFunction<ResultBean> giveLockErrorToResultBean() {
        return giveLockErrorToResultBean(null);
    }

    /**
     * 功能描述：获取Redis锁处理成功——简单函数对象
     *
     * @date : 2022/6/17 0017 下午 3:04
     */
    public static <T> RedisLockSuccessFunction<T, ResultBean> giveLockSuccessToResultBean() {
        return (iRedisManage, t) -> {
            if (t.getClass().equals(ResultBean.class)) {
                return (ResultBean) t;
            }
            return ResultBean.factorySuccess(t);
        };
    }

    /**
     * 功能描述：获取Redis锁处理成功——简单函数对象
     *
     * @date : 2022/6/17 0017 下午 3:04
     */
    public static RedisLimitingMessageFunction<ResultBean> giveLockLimitingToResultBean(String message) {
        return () -> ResultBean.factorySuccess(message);
    }

    /**
     * 功能描述：获取Redis锁处理成功——简单函数对象
     *
     * @date : 2022/6/17 0017 下午 3:04
     */
    public static RedisLimitingMessageFunction<ResultBean> giveLockLimitingToResultBean() {
        return giveLockLimitingToResultBean("当前网络拥堵，请稍后再试");
    }
}
